# 给你一个正整数 num 。如果 num 是一个完全平方数，则返回 true ，否则返回 false 。

# 完全平方数 是一个可以写成某个整数的平方的整数。换句话说，它可以写成某个整数和自身的乘积。

# 不能使用任何内置的库函数，如  sqrt 。

 

# 示例 1：

# 输入：num = 16
# 输出：true
# 解释：返回 true ，因为 4 * 4 = 16 且 4 是一个整数。
# 示例 2：

# 输入：num = 14
# 输出：false
# 解释：返回 false ，因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

# 二分
class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        i, j = 1, num
        while i < j:
            m = (i + j) // 2
            if m * m < num:
                i = m + 1
            else : j = m
        return i * i == num

# 暴力
class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        i = 1
        while i * i < num:
            i += 1
        return i * i == num

# 等差数列
# ps: 1 + 3 + 5 + 7 + 9 + ... + 2n-1 = n²
# 题目只要返回正确与否， 不考虑根号结果
class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        i = 1
        while num > 0:
            num -= i
            i += 2
        return num == 0
